这是一个动态规划的问题。我们可以使用一个二维数组 dp[i][j] 来记录当前选择前 i 个食物时,能量总和在 [l, r] 范围内的方案数。
算法步骤如下:
1. 初始化 dp[0][0] = 1。
2. 遍历每一个食物 i(从 1 到 n):
* 对于每个能量值 j 从 l 到 r:
* 如果 j >= w[i-1],则 dp[i][j] = dp[i-1][j-w[i-1]]。
* 否则,dp[i][j] = dp[i-1][j]。
3. 最终答案就是 dp[n][r] - dp[n][l-1]。
下面是代码实现
这个算法的时间复杂度是 O(n∗(r−l+1))O(n * (r-l+1))O(n∗(r−l+1)) ,空间复杂度是 O(n∗(r−l+1))O(n * (r-l+1))O(n∗(r−l+1))。对于给定的数据范围,这个算法可以很好地解决这个问题。